package com.yami.shop.service.impl;

import com.yami.shop.service.MeltCloudUserService;
import io.rong.RongCloud;
import io.rong.methods.push.PushCustom;
import io.rong.models.push.AudienceCustom;
import io.rong.models.push.Notification;
import io.rong.models.push.PlatformNotification;
import io.rong.models.push.PushModel;
import io.rong.models.response.PushResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.PostConstruct;

/**
 * UserServiceImpl
 *
 * @author RongCloud
 */
@Slf4j
@Service
public class RongYunPushServiceImpl {
    @Autowired
    private RongCloud rongCloud;
    private PushCustom pushCustom;

    @PostConstruct
    public void init() {
        this.pushCustom = rongCloud.pushCustom;
    }

    @Autowired
    private MeltCloudUserService userService;

    /**
     * 推送plus
     *
     * @throws Exception
     */
    @Transactional(rollbackFor = Exception.class)
    public void pushCustom() throws Exception {
        PushModel pushmodel = new PushModel();
        // 目标平台（操作系统），可以为 ios、android 其中一个或全部
        pushmodel.setPlatform(new String[]{"ios", "android"});
        // 推送条件。支持按用户标签推送（tag 、tag_or）、按应用包名推送（packageName）和按指定平台全部推送（is_to_all）。注意：如果推送条件中 is_to_all 为 true，则忽略其他推送条件。
        AudienceCustom audience = new AudienceCustom();
        audience.setIs_to_all(true);
        pushmodel.setAudience(audience);

        // 设置 Android/IOS 平台下的推送内容及附加信息
        Notification notification = new Notification();
        // 通知栏显示标题，最长不超过 50 个字符。
        notification.setTitle("");
        // 推送通知内容，最长不超过 50 个字符。
        notification.setAlert("this is push");

        PlatformNotification platformNotification = new PlatformNotification();
        // 华为推送通知渠道的 ID
        String hwChannelId = "23423423423";
        PlatformNotification.Platform ppHw = new PlatformNotification.Platform(hwChannelId);
        // 华为推送自定义的通知栏消息右侧大图标 URL，
        // 如果不设置，则不展示通知栏右侧图标。
        // URL 使用的协议必须是 HTTPS 协议，取值样例：https://example.com/image.png。
        // 图标文件须小于 512KB，图标建议规格大小：40dp x 40dp，弧角大小为 8dp，
        // 超出建议规格大小的图标会存在图片压缩或显示不全的情况
        ppHw.setImage("https://img95.699pic.com/xsj/0s/xl/gz.jpg!/fw/700/watermark/url/L3hzai93YXRlcl9kZXRhaWwyLnBuZw/align/southeast");
        platformNotification.setHw(ppHw);

        // oppo 推送通知渠道的 ID
        platformNotification.setOppo("oppochannelid");

        // vivo 推送通道类型。0 为运营消息、1 为系统消息，默认为 0。
        platformNotification.setVivo("1");

        // 小米推送通知渠道的 ID
        String miChannelId = "23423423423";
        PlatformNotification.Platform ppMi = new PlatformNotification.Platform(miChannelId);
        // 小米推送自定义的通知栏消息右侧图标 URL，如果不设置，则不展示通知栏右侧图标。国内版仅 MIUI12 以上版本支持，以下版本均不支持；国际版支持。图片要求：大小120 * 120px，格式为 png 或者 jpg 格式。
        ppMi.setLarge_icon_uri("https://img95.699pic.com/xsj/0s/xl/gz.jpg!/fw/700/watermark/url/L3hzai93YXRlcl9kZXRhaWwyLnBuZw/align/southeast");
        platformNotification.setMi(ppMi);

        // 设置 Android 平台下的推送及附加信息
        notification.setAndroid(platformNotification);
        // 设置 iOS 平台下的推送及附加信息
        // notification.setIos(platformNotification);
        pushmodel.setNotification(notification);

        System.out.println("req: " + pushmodel.toString());
        PushResult result = pushCustom.pushcustom(pushmodel);
        System.out.println("rsp: " + result.toString());
    }

}
